package coop.bancocredicoop.proyectos.gd.procedure;

import java.io.ByteArrayInputStream;
import java.util.Date;

import coop.bancocredicoop.proyectos.gd.DocumentFile;
import coop.bancocredicoop.proyectos.gd.DocumentStream;
import coop.bancocredicoop.proyectos.gd.Usuario;
import coop.bancocredicoop.proyectos.gd.alfresco.AlfrescoHttpClient;
import coop.bancocredicoop.proyectos.gd.alfresco.Utils;
import coop.bancocredicoop.proyectos.gd.query.document.FindDocumentById;
import coop.bancocredicoop.proyectos.gd.service.DocumentCreationResult;
import coop.bancocredicoop.proyectos.gd.service.DocumentService;

public class CorregirDocumentoProcedure {

	public Long run(Long documentId, String userName, Long customerId,
			String boxId, Long documentTypeId, Date validTo, String tags,
			byte[] arrayByte, String notes) throws Exception {

		/*
		 *  se anula el documento
		 */
		new AnularDocumentoProcedure().run(documentId, userName);

		/*
		 *  si no se carga ningun archivo .pdf, se utiliza el mismo .pdf
		 */
		if (arrayByte == null) {
			AlfrescoHttpClient alfrescoHttpClient = Utils.
					getAlfrescoClientFromConfigAsSystemUser();

			arrayByte = alfrescoHttpClient.
					getContentAsByteArray(new FindDocumentById().
					run(documentId));
		}

		/*
		 *  se procede a create el nuevo Document corregido
		 */
		DocumentStream documentFile = new DocumentStream(
				new ByteArrayInputStream(arrayByte));

		DocumentCreationResult result = new DocumentService().
				createDocument(
				customerId,
				boxId,
				documentTypeId,
				validTo,
				tags,
				documentFile,
				new Usuario(userName, "", ""),
				new Date(),
				notes,
				null);

		if (!result.documentWasCreated())
			throw new RuntimeException("No se ha podido crear el " +
					"documento");

		if (result != null)
			return result.getDocument().getId();
		else
			return null;

	}

}
